package com.cs.beneficios.web.action;
import com.cs.beneficios.business.entity.BeneficiarioDAO;
import com.cs.beneficios.business.entity.ProgramaDAO;
import com.cs.beneficios.business.entity.VflexDAO;
import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.beneficios.web.form.ActualizarbeneficiarioForm;
import com.cs.paoyer.administration.business.model.UserVO;
import com.cs.paoyer.administration.exception.AdministrationUserException;
import com.cs.paoyer.administration.util.AccessControl;
import com.cs.paoyer.common.exception.CommonUserException;
import com.cs.paoyer.common.exception.UserException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
//import java.util.ArrayList;
import java.util.Collection;
import java.util.Calendar;
//import java.util.Date;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
//import org.apache.struts.action.ActionError;
//import org.apache.struts.action.ActionErrors;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class ActualizarBeneficiarioAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    
    
    ActionMessages messages = new ActionMessages();
    try
    {
      	AccessControl access = new AccessControl();
        access.validateAccess(mapping,request,response);
        
        //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
        BeneficiarioVO objBeneVO = new BeneficiarioVO();
       
        ActualizarbeneficiarioForm actualizarForm = ( ActualizarbeneficiarioForm ) form;
        HttpSession session = request.getSession();
        objBeneVO.setCode(actualizarForm.getCode());
        objBeneVO.setTipoDocumento(actualizarForm.getTipoDocumento());
        objBeneVO.setNumeroDocumento(actualizarForm.getNumeroDocumento());
        objBeneVO.setNombre1(actualizarForm.getPrimer_nombre());
        objBeneVO.setNombre2(actualizarForm.getSegundo_nombre());
        objBeneVO.setPrimerApellido(actualizarForm.getPrimerApellido());
        objBeneVO.setSegundoApellido(actualizarForm.getSegundoApellido());  
        if(actualizarForm.getDia().equalsIgnoreCase("dia") || 
          actualizarForm.getMes().equalsIgnoreCase("mes") ||
          actualizarForm.getAno().equalsIgnoreCase("ano") )
          {
            objBeneVO.setFechaNacimiento(null);
          }else
          {
            String strFechaNacimiento = actualizarForm.getDia()+"/"+
                                    actualizarForm.getMes()+"/"+
                                    actualizarForm.getAno();
            objBeneVO.setFechaNacimiento(strFechaNacimiento);
          }
        objBeneVO.setSexo(actualizarForm.getSexo());
        objBeneVO.setTelefono(actualizarForm.getTelefono());
        objBeneVO.setDirDescriptiva(actualizarForm.getDirDescriptiva());
        String dirEncasillada = actualizarForm.getDirEncasillada();
        objBeneVO.setDirEncasillada(dirEncasillada);
        objBeneVO.setCobama(actualizarForm.getCobama());  
        objBeneVO.setVflComuna(actualizarForm.getVflComuna());
        objBeneVO.setCodeBarrio(actualizarForm.getCodeBarrio());  
        objBeneVO.setCodeZona(actualizarForm.getCodeZona());
        objBeneVO.setEtnia(actualizarForm.getEtnia());
        objBeneVO.setMail(actualizarForm.getMail());
        
        //Para la auditoria de registros
        UserVO user = (UserVO) request.getSession(true).getAttribute("userInfo");
        String terminalAddress = request.getRemoteAddr();
				objBeneVO.setUpdateUser(user.getName());
				objBeneVO.setUpdateTerminal("WEB="+terminalAddress);
        Calendar c = Calendar.getInstance(); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
        objBeneVO.setUpdateDate(dateFormat.format(c.getTime()));
        
        int update = 0;
        try
        {
            BeneficiarioDAO objBeneDAO = new BeneficiarioDAO(cf);
            update = objBeneDAO.actualizarBeneficiario(objBeneVO);
            cf.closeConnection(objBeneDAO.getConn());
                  
        }catch(SQLException e){
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
        }
        if(update == 1){
          session.setAttribute("actualizo","true");
          session.removeAttribute("beneficiarios");
          Collection beneficiarios=null;
          request.setAttribute("msg","");       

          // Mostrar programas y subprogramas
         
          Collection programas=null;
          ProgramaDAO objProgramaDAO;
          ProgramaVO objProgramaVO =  new ProgramaVO();
          try
          {
            objProgramaDAO = new ProgramaDAO(cf);
            programas = objProgramaDAO.findProgramaByCriterea(objProgramaVO);
            cf.closeConnection(objProgramaDAO.getConn());
          }catch(SQLException e){
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
          }
          if(programas.size() > 0){
            request.setAttribute("programas",programas);
          }
          
          return mapping.findForward("success");
        }
        else{
          try
          {
            VflexDAO valorFlexDAO = new VflexDAO(cf); 
            Collection comunas = valorFlexDAO.getVflex("COMUNA");
            Collection barrios = valorFlexDAO.getVflex("BARRIO");
            Collection zonas = valorFlexDAO.getVflex("ZONA");
            request.setAttribute("comunas",comunas);
            request.setAttribute("barrios",barrios);
            request.setAttribute("zonas",zonas); 
          }catch(SQLException e)
          {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
          }
          if(update == -1 )
              request.setAttribute("msg","Ocurrio un error al actualizar el beneficiario: El documento ya fue registrado en el sistema");  
          else
              request.setAttribute("msg","Ocurrio un error al actualizar el beneficiario");  
          
          request.setAttribute("beneficiario", objBeneVO);
          return mapping.findForward("fail");
        }
    
    }catch (UserException ue) 
		{
				messages.add("msgWarn",  new ActionMessage("loginForm.message."
																			+ ue.getExceptionVO().getId()));
				saveMessages(request, messages);
      	if(ue.getExceptionVO().getId()==AdministrationUserException.ENDED_SESSION)
        {       
              response.sendRedirect(request.getContextPath()+"/index.jsp");
        }
        else if(ue.getExceptionVO().getId()==CommonUserException.NOT_ALLOWED_RESOURCE)
        {
            response.sendRedirect(request.getContextPath()+"/admin/tile/invalidatedResource.jsp");
        }
        else
        {
            return mapping.getInputForward();
        }
      
    }

    return mapping.findForward("success");
  }
}